package com.loriot.common.the_two_sneaky_numbers_of_digitville_3289;

import java.util.HashMap;

/**
 * @Title: Main
 * @Package: com.loriot.common.single_number_136
 * @Description:
 * @Author: zzy boy
 * @Date: 2025/10/31 9:46
 * @Version: 0.0.1-alpha
 */

public class Main {
    class Solution {
        public int[] getSneakyNumbers(int[] nums) {
            HashMap<Integer,Integer> map = new HashMap();
            int a = -1;
            int b = -1;
            int[] rst = new int[2];
            for(int item: nums){
                if(map.get(item)==null){
                    map.put(item,1);
                }else{
                    if(a==-1){
                        a = item;
                    }else{
                        b = item;
                    }
                }
            }
            rst[0] = a;
            rst[1] = b;
            return rst;
        }
    }
    class Solution2 {
        public int[] getSneakyNumbers(int[] nums) {
            int n = nums.length-2;
            int xor = 0;
            for(int item:nums){
                xor ^= item;
            }
            for(int i=0;i<n;i++){
                xor ^= i;
            }
            // xor是结果的异或
            // 获取xor的最低位1，也就是两个数第一个不同的
            //
            int shift = xor & -xor;//这个操作可以找到第一个为1的位
            // 22 1 1 2
            // 33 0 0 3
            int [] rst = new int[2];
            for(int item:nums){
                if((item&shift)==0){
                    rst[0] ^= item;
                }else{
                    rst[1] ^= item;
                }
            }
            for(int i=0;i<n;i++){
                if((i&shift)==0){
                    rst[0] ^= i;
                }else{
                    rst[1] ^= i;
                }
            }
            return rst;
        }
    }
}
